package com.company.ljh.medium;
/**
 * 165.给定一个数字，我们按照如下规则把它翻译为字符串：0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2022/6/10 10:46
 * @version:1.0
 */
public class 把数字翻译成字符串 {
    //动态规划，注意数字不能为01-09
    public int translateNum(int num) {
        String str = String.valueOf(num);
        char chars[] = str.toCharArray();
        int dp [] = new int[chars.length + 1];
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2;i <= chars.length;i++){
            //dp递归方程,dp[i] = dp[i-2]+dp[i-1] (前一位数字和当前数字和小于25)，否则dp[i-1]
            if(chars[i-2] != '0' && Integer.valueOf(chars[i-2] + ""+ chars[i-1]) <= 25){
                dp[i] = dp[i-1] + dp[i-2];
            }else{
                dp[i] = dp[i-1];
            }
        }
        return dp[chars.length];
    }
}
